#ifndef __PRINTER_H__
#define __PRINTER_H__
#include "cppcore.h"
#include "student.h"
#include "course.h"
#include "stu_crs.h"
#include "node.h"
#include "list.h"


void selection(
    List<Student>* sList,
    List<Course>* cList,
    List<StuCrs>* scList);


class Printer {
public:
    /**
     * @brief 打印指定菜单.
     * @param toPrint 要打印的内容.
     */
    static void printMenu(const wchar_t* toPrint);
    /**
     * @brief 打印指定菜单, 键盘输入选项, 如果是合理的选项则返回选择结果.
     * @param toPrint 要打印的内容.
     * @param menu    可选项目.
     *
     * @return 选择结果.
     */
    static std::wstring printMenu(
        const wchar_t* toPrint,
        std::set<std::wstring> menu);
    /**
     * @brief 格式化字符串输出并自动换行 (C++20), 非常 Pythonic
     * @param fmt  表示格式字符串的字符串视图.
     * @param args... 要格式化的参数.
     */
    template <typename... T>
    static void fmtln(const wchar_t* fmtstr, T... args);

    static constexpr const wchar_t* WELCOME =
L"**************************************************\n" \
L"*              学生管理系统V1.0                  *\n" \
L"*          欢迎使用学生管理系统V1.0!             *\n" \
L"**************************************************\n" \
L"*            已经从文件中恢复数据.               *\n" \
L"**************************************************\n"
;
    static constexpr const wchar_t* WELCOME_FIRST =
L"**************************************************\n" \
L"*              学生管理系统V1.0                  *\n" \
L"*          欢迎使用学生管理系统V1.0!             *\n" \
L"**************************************************\n" \
L"*     这是一个很厉害的学生管理系统, 可以很方便地 *\n" \
L"* 管理学生数据, 显示学生数据, 修改学生数据, 查询 *\n" \
L"* 学生数据, 修改学生数据, 保存学生数据, 删除学生 *\n" \
L"* 数据, 管理课程数据, 显示课程数据, 修改课程数据 *\n" \
L"* , 查询课程数据, 修改课程数据, 删除学生数据. .  *\n" \
L"* . 只有你想不到的, 没有这个东西做不到的,        *\n" \
L"**************************************************\n"
;
    static constexpr const wchar_t* M_MAIN =
L"**************************************************\n" \
L"*              学生管理系统V2.0                  *\n" \
L"*                请选择功能                      *\n" \
L"**************************************************\n" \
L"*                1.添加信息                      *\n" \
L"*                2.查询信息                      *\n" \
L"*                3.修改数据                      *\n" \
L"*                4.删除数据                      *\n" \
L"*                0.保存并退出                    *\n" \
L"**************************************************\n"
;
    static constexpr const wchar_t* M_1 =
L"**************************************************\n" \
L"*                1.添加学生信息                  *\n" \
L"*                2.添加课程信息                  *\n" \
L"*                3.选课系统                      *\n" \
L"*                0.返回上一级                    *\n" \
L"**************************************************\n"
;
    static constexpr const wchar_t* M_2 =
L"**************************************************\n" \
L"*                1.输入条件查询学生信息          *\n" \
L"*                2.输入条件查询课程信息          *\n" \
L"*                3.输入条件查询选课信息          *\n" \
L"*                0.返回上一级                    *\n" \
L"**************************************************\n"
;
    static constexpr const wchar_t* M_3 =
L"**************************************************\n" \
L"*                1.修改学生信息                  *\n" \
L"*                2.修改课程信息                  *\n" \
L"*                3.退选课程                      *\n" \
L"*                0.返回上一级                    *\n" \
L"**************************************************\n"
;
    static constexpr const wchar_t* M_4 =
L"**************************************************\n" \
L"*                1.删除学生数据                  *\n" \
L"*                2.删除课程数据                  *\n" \
L"*                3.删除选课数据                  *\n" \
L"*                4.删除所有数据                  *\n" \
L"*                0.返回上一级                    *\n" \
L"**************************************************\n"
;

};


#endif /* __PRINTER_H__ */
